//
//  basic_cal_square_matrix.h
//  linear_algebra
//
//  Created by zhangnan on 2025/3/27.
//

#ifndef basic_cal_square_matrix_h
#define basic_cal_square_matrix_h

#include <stdio.h>
#include "matrix.h"
#include "basic_cal_matrix.h"
#include "squares_matrix.h"

// 计算整数类型方阵的行列式
// 参数: matrix - 指向整数类型方阵的指针
// 返回值: 方阵的行列式值
int det_int(SQUARES_INT_MATRIX_TYPE *matrix);

// 计算双精度浮点数类型方阵的行列式
// 参数: matrix - 指向双精度浮点数类型方阵的指针
// 返回值: 方阵的行列式值
double det_double(SQUARES_DOUBLE_MATRIX_TYPE *matrix);

// 计算整数类型方阵的伴随矩阵
// 参数: matrix - 指向整数类型方阵的指针
// 返回值: 指向计算出的伴随矩阵的指针
SQUARES_INT_MATRIX_TYPE* adjugate_int(SQUARES_INT_MATRIX_TYPE *matrix);

// 计算双精度浮点数类型方阵的伴随矩阵
// 参数: matrix - 指向双精度浮点数类型方阵的指针
// 返回值: 指向计算出的伴随矩阵的指针
SQUARES_DOUBLE_MATRIX_TYPE* adjugate_double(SQUARES_DOUBLE_MATRIX_TYPE *matrix);

// 计算整数类型方阵的转置矩阵
// 参数: matrix - 指向整数类型方阵的指针
// 返回值: 指向计算出的转置矩阵的指针
SQUARES_INT_MATRIX_TYPE* transpose_squares_matrix_int(SQUARES_INT_MATRIX_TYPE *matrix);

// 计算双精度浮点数类型方阵的转置矩阵
// 参数: matrix - 指向双精度浮点数类型方阵的指针
// 返回值: 指向计算出的转置矩阵的指针
SQUARES_DOUBLE_MATRIX_TYPE* transpose_squares_matrix_double(SQUARES_DOUBLE_MATRIX_TYPE *matrix);

// 使用伴随矩阵法计算整数类型方阵的行列式
// 参数: matrix - 指向整数类型方阵的指针
// 返回值: 方阵的行列式值
int det_ajugate_int(SQUARES_INT_MATRIX_TYPE *matrix);

// 使用伴随矩阵法计算双精度浮点数类型方阵的行列式
// 参数: matrix - 指向双精度浮点数类型方阵的指针
// 返回值: 方阵的行列式值
double det_ajugate_double(SQUARES_DOUBLE_MATRIX_TYPE *matrix);

#endif /* basic_cal_square_matrix_h */
